import 'package:flutter/material.dart';
import 'package:interview/theme/app_colors.dart';

typedef void OnChangedCallback(String value);
typedef void OnSubmittedCallback(String value);

class InputItem extends StatefulWidget {
  final AppColors theme;
  final String? labelText;
  final String? hintText;
  final String placeholder; // 默认的placeholder文本
  final OnChangedCallback? onChanged;
  final OnSubmittedCallback? onSubmitted;
  final TextEditingController? controller;
  final TextInputType? keyboardType;
  final bool obscureText;
  final String? statusText;
  final InputBorder? border; // 可定制的边框样式
  final EdgeInsetsGeometry? contentPadding; // 可定制的内边距
  final TextStyle? hintStyle; // 可定制的提示文字样式
  final TextStyle? textStyle; // 输入文字的样式

  const InputItem({
    super.key,
    required this.theme,
    this.labelText,
    this.hintText,
    this.placeholder = "请输入内容...", // 设置默认值
    this.onChanged,
    this.onSubmitted,
    this.controller,
    this.keyboardType,
    this.obscureText = false, // 默认为false，适用于普通文本输入；true时用于密码输入
    this.statusText, // 初始化文本
    this.border, // 支持外部传入边框样式
    this.contentPadding, // 支持外部传入内容边距
    this.hintStyle, // 自定义 hintStyle
    this.textStyle, // 自定义文字样式
  });

    // 暴露一个 GlobalKey 供外部调用
  static InputItemState? of(BuildContext context) =>
      context.findAncestorStateOfType<InputItemState>();

  @override
  State<InputItem> createState() => InputItemState();
}

class InputItemState extends State<InputItem> {
  late TextEditingController _controller;
  late FocusNode _focusNode; 
  bool hasContent = false;

  @override
  void initState() {
    super.initState();
    _controller = widget.controller ?? TextEditingController();
    _controller.text = widget.statusText ?? ''; // statusText 为空时默认设置为空字符串
    _focusNode = FocusNode(); // 初始化 FocusNode
    _controller.addListener(() {
      setState(() {
        hasContent = _controller.text.isNotEmpty;
      });
    });
  }

  @override
  void dispose() {
    if (widget.controller == null) {
      _controller.dispose();
    }
    _focusNode.dispose();
    super.dispose();
  }


  /// 清空输入框内容的方法，供外部调用
  void clear() {
    _controller.clear();
    widget.onChanged?.call(''); // 通知外部输入框内容已清空
  }


  /// 回填输入框
  void setValue(String value){
    _controller.text = value;
  }


    /// 外部调用，收起键盘
  void unfocus() {
    _focusNode.unfocus();
  }

  /// 外部调用，聚焦输入框
  void focus() {
    _focusNode.requestFocus();
  }


  @override
  Widget build(BuildContext context) {
    return TextField(
      focusNode: _focusNode,
      cursorColor:widget.theme.contrastMix3! ,
      cursorWidth: 1.5,
      controller: _controller,
      decoration: InputDecoration(
        isDense: true, // 减少 TextField 的内置高度
        isCollapsed: true, // 去除内部高度，确保高度与文字一致
        // 使用外部传入的边框样式，默认无边框
        border: widget.border ?? InputBorder.none,
        enabledBorder: widget.border, // 激活时的边框
        focusedBorder: widget.border, // 聚焦时的边框
        hintText: widget.hintText ?? widget.placeholder, // 使用hintText或默认placeholder
        hintStyle: widget.hintStyle ??
            TextStyle(
              fontSize: 12,
              color: hasContent
                  ? widget.theme.contrastMix3!
                  : widget.theme.contrastMix1!,
            ), // 默认提供hint样式
        contentPadding: widget.contentPadding ?? EdgeInsets.zero, // 外部控制内容内边距
      ),
      style: widget.textStyle ??
          TextStyle(
            fontSize: 12,
            color: widget.theme.contrastMix3!,
          ), // 默认输入文字样式
      onChanged: (value) {
        widget.onChanged?.call(value); // 确保在有监听器时调用
      },
      onSubmitted: widget.onSubmitted,
      keyboardType: widget.keyboardType,
      obscureText: widget.obscureText,
    );
  }
}
